]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
[StEntry] Consider children when setting hover state
authorFlorian Müllner <fmuellner@gnome.org>
Tue, 25 May 2010 13:45:51 +0000 (15:45 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Wed, 2 Jun 2010 21:21:13 +0000 (23:21 +0200)
When hovering over the entry's ClutterText, the entry itself
currently receives a leave event and updates the hover state.
Apply the same logic as StWidget itself to treat children as
part of the entry.

https://bugzilla.gnome.org/show_bug.cgi?id=620381

src/st/st-entry.c

index 1d641b63e5cdaf87f8866f9c6851501bd3e05fa2..42a468709f63df9c44c1f4659e5a42af706759c9 100644 (file)
@@ -577,13 +577,23 @@ st_entry_key_focus_in (ClutterActor *actor)
   clutter_actor_grab_key_focus (priv->entry);
 }
 
+static gboolean
+actor_contains (ClutterActor *widget,
+                ClutterActor *other)
+{
+  while (other != NULL && other != widget)
+    other = clutter_actor_get_parent (other);
+  return other != NULL;
+}
+
 static gboolean
 st_entry_enter_event (ClutterActor         *actor,
                       ClutterCrossingEvent *event)
 {
   StEntryPrivate *priv = ST_ENTRY_PRIV (actor);
 
-  if (priv->hint && priv->hint_visible)
+  if (actor_contains (actor, event->source)
+      && priv->hint && priv->hint_visible)
     {
       st_widget_set_hover (ST_WIDGET (actor), TRUE);
     }
@@ -595,7 +605,8 @@ static gboolean
 st_entry_leave_event (ClutterActor         *actor,
                       ClutterCrossingEvent *event)
 {
-  st_widget_set_hover (ST_WIDGET (actor), FALSE);
+  if (!actor_contains (actor, event->related))
+    st_widget_set_hover (ST_WIDGET (actor), FALSE);
 
   return CLUTTER_ACTOR_CLASS (st_entry_parent_class)->leave_event (actor, event);
 }